package gang.com.mobelhelper.ui.activity;

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.LayoutInflaterCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;

import com.mikepenz.iconics.context.IconicsLayoutInflater;
import com.readystatesoftware.systembartint.SystemBarTintManager;

import javax.inject.Inject;

import butterknife.ButterKnife;
import butterknife.Unbinder;
import gang.com.mobelhelper.AppApplication;
import gang.com.mobelhelper.R;
import gang.com.mobelhelper.di.component.AppCompent;
import gang.com.mobelhelper.presenter.BasePresenter;

/**
 * Created by xiaogangzai on 2017/7/18.
 * Activity的封装
 * 注意子类继承父类，要想直接使用父类里面的变量，父类的变量必须定义成protected
 * <p>
 * * 沉浸式状态栏 Github地址：https://github.com/jgilfelt/SystemBarTint
 */

public abstract class BaseActivity<T extends BasePresenter> extends AppCompatActivity {
    private Unbinder mUnbinder;
    protected AppApplication mApplication;

    //每个Activity或者Fragment都要使用Presenter,但是因为每一个Presenter我们都是不知道的
    //所以使用泛型
    //注意在注入的时候不要定义为私有的，私有是不可以注入的,下面这句话的意思是告诉Dagger2我们需要这个对象
    @Inject
    T mPresenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        //字体图标方法调用，他要在super方法之前
        LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate()));
        //自定义字体在这里配置就可以
        super.onCreate(savedInstanceState);
        //这个id参数肯定由子类提供来
        setContentView(setLayout());

        //沉浸式状态栏
        immersion_state();
        mUnbinder = ButterKnife.bind(this);
        this.mApplication = (AppApplication) getApplication();
        setupActivityComponent(mApplication.getmAppComponent());
        init();
    }

    //取消沉浸式状态栏
    private void immersion_state() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //透明状态栏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //透明导航栏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            // create our manager instance after the content view is set
            SystemBarTintManager tintManager = new SystemBarTintManager(this);
            // 激活状态栏
            tintManager.setStatusBarTintEnabled(true);
            // 激活导航栏
            tintManager.setNavigationBarTintEnabled(true);
            //设置系统栏设置颜色
            //tintManager.setTintColor(R.color.color_bg_guide1);
            //给状态栏设置颜色
            tintManager.setStatusBarTintResource(R.color.color_bg_guide2);
            //设置导航栏设置资源
            tintManager.setNavigationBarTintResource(R.color.color_bg_guide3);

            //只在代码中设置你会发现导航栏移动了，需要布局中加入内容
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mUnbinder != Unbinder.EMPTY) {
            mUnbinder.unbind();
        }
    }

    public abstract int setLayout();


    //只要是Activity用到注入的时候都会写appCompent(((AppApplication) getActivity().getApplication())这个注入
    //所有的Compent都会依赖于AppCompent
    public abstract void setupActivityComponent(AppCompent appCompent);

    protected void startActivity(Class c) {
        this.startActivity(new Intent(this, c));
    }

    //初始化数据的方法，也是封装写好
    public abstract void init();
}
